perm filename NOTBMX.F4[1,MUS] blob
sn#075944 filedate 1973-12-05 generic text, type T, neo UTF8
00010 C***** SUBRS NOTES, BEAMS, BMX ***********
00055
00100 SUBROUTINE NOTES
00200 COMMON/SCM/V(78),I,LCNT,STAFF,LIST(200),REND
00300 COMMON/SCX/RHY(4),JALPHA(12),JX,RA,JZ,IRHY,RB,KA,KB,IZ
00310 COMMON /XRN/RN(4000)
00400 COMMON /SC/J,L,MK,ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA
00500 1,DBST,NFLG,IXX,ISEMI,IQT,VX(50),IAMP,K,KN,M,MODE,IBLA
00700 COMMON /POS/POS1,POS2
00710 COMMON/FRMT/F78F(1),FA1(1),FA5(1),ASK
00730 DIMENSION R(8,100)
00740 EQUIVALENCE (R,RN(3001))
00750 DATA ACMV/2.3/
00760 POS1=0
00770 POS2=200
00800 444 FORMAT(' TYPE POS1, POS2'/)
00810 CALL SETUP
00820 IF(RN(3921).GE.0)GO TO 8
00830 C SKIPS IF USING SETUP ON STAFF 4
00900 4333 TYPE 444
01100 ACCEPT F78F,POS1,POS2
01200 IF(POS2.EQ.0)POS2=200.
01250 IF(POS1.GE.POS2)GO TO 4333
01300 8 KN=0
01400 IRHY=0
01500 C IZ=# OF ITEMS FROM SCANR*******
01600 IZ=I-1
01650 IF(IZ.GT.50)IZ=50
01675 C LIMIT OF 50 ITEMS
01700 CLF=1
01800 JQX=0
01900 D=(POS2-POS1)/I
02000 C D WILL SPACE ALL ITEMS EVENLY FOR NOW
02100
02200 C K=COUNTER FOR USEFUL ITEMS (OMITS CLEFS)
02400 K=1
02500 KQ=1
02600 C LOOPS TO 7333
02700 7 JG=0
02800 X=V(KQ)
02900 ACC=0
03000 RA=2.
03100 IF(X.LT.0)GO TO 86
03200 C JUMP IF A CLEF OR BAR OR METER
03300 IRHY=IRHY+1
03400 C ADDS A RHYTHMIC UNIT
03500 GO TO 2333
03505 86 DO 89 LL=5,8
03510 89 R(LL,K)=0
03515 C TO CLEAR END OF ITEM
03520 C TO CLEAR LAST PARAMS IN SOME ITEMS LATER
03600 IF(AMOD(X,100.0).EQ.-99.)GO TO 84
03700 C JUMP IF A CLEF
03750 IF(X.LT.-599.AND.X.GT.-610)GO TO 84
03775 C FOUND AN EXTENDED BARLINE?
03800 IF(X.LT.-1.)GO TO 2333
03900 C JUMP IF IT'S A DBLSTP
04000 RA=18.
04100 L=-X*100.
04200 Y=L
04300 R(5,K)=-(X+Y/100.)*10000.+.0001
04400 C GETS BOTTOM NUM OF METER
04500 X=85.
04600 GO TO 85
04700 84 T=CLF
04800 CLF=-(99.+X)/100.
04850 RZ=X
04900 X=85.
05000 C WILL SKIP LATER
05100 Y=CLF
05150 LL=Y
05200 RA=3.
05300 IF(LL.NE.5)GO TO 83
05400 C CLF5 = BAR LINE
05500 RA=4.
05700 Y=1.
05710 IF(LL.NE.CLF)Y=-599.-RZ
05720 C 'M'=1 STF. 'M2'=2 STAVES, ETC.
05790 831 CLF=T
05800 GO TO 85
05900 83 IF(Y.LT.10.)GO TO 851
06000 C NOW A KSIG.
06100 RA=7.
06200 Y=Y/10.
06300 IF(Y.GT.10.)Y=10.-Y
06400 C CHANGES FLAT TO NEG.
06600 R(5,K)=T-1
06740 GO TO 831
06800 851 IF(JQX.NE.0)Y=Y+100.
06900 JQX=-1
07000 C AFTER THE FIRST TIME, THEN MINICLEFS
07010 R(5,K)=Y
07020 Y=0
07030 C FOR NEW CLEF ROUTINE
07100 85 R(4,K)=Y
07200 2333 R(3,K)=STAFF
07300 IF(X.GT.0)KN=KN+1
07400 R(2,K)=KN*D+POS1
07500 IF(X.EQ.85.)GO TO 7333
07600 C JUMP IF REST, METER, CLEF OR BAR
07700 RA=1.
07800 IF(X.GT.0)GO TO 2133
07900 X=-X
08000 JG=-1
08100 C DBLSTOP=-1
08200 R(8,K)=-1.
08300 2133 IF(X.LT.100.)GO TO 433
08400 IF(X.LT.1000.)GO TO 233
08500 IF(X.LT.10000.)GO TO 333
08600 ACC=3.
08700 C NATURAL
08800 X=X-10000.
08900 GO TO 433
09000 333 ACC=2.
09100 C SHARP
09200 X=X-1000.
09300 GO TO 433
09400 233 ACC=1.
09500 C FLAT
09600 X=X-100.
09700 433 Y=AMOD(X,12.0)
09800 IF(Y.EQ.0)Y=12.
09900 J=(Y+1)/2
10000 IF(Y.GT.5.)J=(Y+2)/2
10100 IF(ACC.EQ.0.OR.ACC.EQ.3.)GO TO 133
10200 IF(ACC.EQ.1.)GO TO 533
10300 IF(Y.EQ.1.OR.Y.EQ.6.)J=J-1
10400 GO TO 133
10500 533 J=J+1
10600 133 IF(CLF.EQ.2)GO TO 633
10700 IF(CLF.EQ.3)GO TO 733
10800 IF(CLF.EQ.4)GO TO 833
10900 KA=4
11000 KB=0
11100 GO TO 933
11200 633 KA=2
11300 KB=-2
11400 GO TO 933
11500 733 KA=3
11600 KB=-1
11700 GO TO 933
11800 833 KA=2
11900 KB=-6
12000 933 L=(X-1)/12+1
12100 C L IS OCTAVE
12200 N=(L-KA)*7+J+KB
12300 T=10.
12400 IF(N.GE.7)T=20.
12500 C FOR STEM DIRECTIONS - 'B' AND HIGHER HAVE STEMS DOWN.
12600 R(4,K)=N
12700 C N=NOTE #
12800 IF(JG.EQ.0)GO TO 3133
12900 C JUMP IF NOT DBLSTOP
13000 IF(R(5,K-1).GE.10.)MX=K-1
13100 C MX=1ST NOTE OF CHRD
13200 T=0
13300 L=K-MX
13400 IF(N.LT.R(4,MX))L=-L
13500 R(7,MX)=L
13600 C L+=STEM UP, L-=STEM DOWN ... USED AT END OF NOTES.
13700 RZ=ABS(R(4,MX)-FLOAT(N))-1.
13800 C EXTENDS THE STEM!
13900 IF(RZ.LT.1.)RZ=1.
14000 R(8,MX)=RZ
14100 3133 R(5,K)=ACC+T
14200
14300 7333 R(1,K)=RA
14400 87 K=K+1
14500 KQ=KQ+1
14600 IF(KQ.LE.IZ)GO TO 7
14700
14800 IZ=K-1
14900 C IZ IS NOW REALLY THE NUMBER OF ITEMS TO BE PROCESSED
15100 C NEXT ADJUSTS PLACEMENT OF ACCIDENTALS AND 2NDS.
15200 K=1
15210 1 RX=R(7,K)
15300 IF(RX.EQ.0.OR.R(1,K).EQ.2.)GO TO 2
15400 C JUMP IF NO CHRD COMING
15500 Y=0
15600 C Y=ACCI. MOVER
15700 IF(RX.GT.0)GO TO 3
15800 C JUMP IF STEM IS UP
15900 RA=R(5,K)
16000 IF(RA.GE.10.AND.RA.LT.20.)R(5,K)=RA+10.
16100 C PUTS STEM DOWN IF IT WASN'T
16200 L=K-RX
16300 R(7,K)=0
16400 M=K
16500 RD=0
16600 4 RA=R(4,K)
16700 IF(RD-RA.GT.4.)Y=0
16900 RC=0
17100 C INTERVAL TO PREVIOUS NOTE
17200 AMD=AMOD(R(5,K),10.0)
17220 C CHECK ON USE OF N ELSEWHERE
17250 N=K+1
17300 IF(K.LT.L)RC=RA-R(4,N)
17400 C INTERVAL TO NEXT NOTE
17500 IF(RC+R(6,K).NE.1.)GO TO 6
17600 R(6,N)=20
17700 C PUSHES NOTE TO LEFT
17800 IF(AMD.EQ.0)GO TO 5
17900 IF(Y.EQ.0)Y=Y+.23
18000 C MOVE ACCI ONLY WITH 1ST SMALL INTERVAL
18100 6 IF(AMD.EQ.0)GO TO 5
18200 C JUMP IF NO ACCI.
18300 IF(Y.GE.1.)Y=0
18400 R(5,K)=R(5,K)+Y
18500 IF(Y.EQ.0.OR.(R(6,N).EQ.20.AND.Y.EQ..23))RD=RA
18600 C RESETS SOURCE FOR INTERVALS
18710 IF(R(6,N).EQ.0.AND.AMOD(R(5,N),10.0).NE.0)Y=Y+.23
18800 IF(R(6,K).EQ.20)Y=Y+.23
18900 5 K=N
19000 IF(K.GT.L)GO TO 22
19100 GO TO 4
19200
19300 3 DO 30 M=2,IZ
19400 L=M-1
19500 30 IF(R(4,M)-R(4,L)+R(6,L).EQ.1..AND.R(2,M).EQ.
19600 1 R(2,L))R(6,M)=10
19700 C MOVES NOTE TO RIGHT OF STEM WHEN 2ND.
19800 L=K+R(7,K)+.1
19900 C THE STEM IS UP
20000 RA=R(5,K)
20100 IF(RA.GE.20.)R(5,K)=RA-10.
20200 C PUTS STEM UP IF IT WASN'T
20300 M=L
20400 RD=0
20500 R(7,K)=0
20600 40 RA=R(4,L)
20700 60 IF(AMOD(R(5,L),10.0).EQ.0)GO TO 50
20800 C JUMP IF NO ACCI.
21000 RC=0
21200 IF(L.LT.M)RC=R(4,L+1)-RA
21300 C INTERVAL TO NOTE ABOVE
21400 IF(RD-RA.GT.4.)Y=0
21500 C MOVES ACCIS. BACK AGAIN
21600 R5=R(5,L)+Y
21700 IF(R(6,L).EQ.10)R5=R5+.23
21800 R(5,L)=R5
21900 IF(Y.EQ.0)RD=RA
22000 C RESETS SOURCE INTERVAL
22100 Y=Y+.23
22200 50 L=L-1
22300 IF(L.GE.K)GO TO 40
22400 K=L+1
22500 GO TO 22
22600
22700 2 K=K+1
22800 22 IF(K.LE.IZ)GO TO 1
23100 C ABOVE NEEDED IN OTHER ROUTINES???
23300 END
23400
50000 SUBROUTINE BMX(RA)
50050 C RA=NUMB. OF TAILS
50060 DIMENSION R(8,100)
50080 COMMON /XRN/RN(4000)
50090 EQUIVALENCE (R,RN(3001))
50100 COMMON/SCM/V(78),I,LCNT,STAFF,LIST(200),REND
50200 COMMON/SCX/RHY(4),JALPHA(12),JX,U,JZ,IRHY,JD,KA,KB,IZ
50300 COMMON /SC/J,L,MK
50400 1 ,ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA,DBST,NFLG,IXX,ISEMI,IQT
50500 1 ,VX(50),IAMP,K,KN,M,MODE,IBLA
50600 CC DATA RBM/2.7/
50700 M=IZ
50800 DO 1 L=KN,K
50900 1 VX(L)=AMOD(R(7,L),10.0)
51000 VX(K+1)=0
51100 C CLEARS IT FOR ROUTINE AT '3'
51200 JB=KN
51300 6 DO 2 L=JB,K
51400 IF(VX(L).LE.RA)GO TO 2
51500 C SKIP IF EQ. TO PRESENT BEAM
51600 RB=VX(L)
51700 4 IZ=IZ+1
51800 B=20.
51900 DO 11 JD=L,K
52000 IF(VX(JD).NE.RA)GO TO 11
52100 B=10.
52200 GO TO 12
52300 11 CONTINUE
52400 C FINDS NEED FOR BEAM TO LEFT
52500 12 B=B+RA
52700 DO 5 JE=4,6
52800 5 R(JE,IZ)=R(JE,M)
52900 R(7,IZ)=R(7,M)+RB-RA*2.
53000 C ADDS RIGHT NUM. OF BEAMS
53300 JE=-1
53400 DO 3 JD=JB,K
53500 IF(VX(JD).NE.RB)GO TO 3
53600 JC=JD
53700 C JC IS BEGINNING OF NEW BEAMS
53800 77 IF(VX(JD).NE.VX(JD+1))GO TO 7
53900 C ARE THERE 2 RHYTHMS THE SAME?
54000 JE=JE+1
54100 JD=JD+1
54200 GO TO 77
54300 3 CONTINUE
54400 7 IF(JE.GE.0.OR.(JD.NE.KN.AND.JD.NE.K))GO TO 10
54500 C IF NO UNATTACHED BEAMS, JUMP
54650 CC RB=RSTJC
54750 CC IF(B.NE.10)RB=-RB
54800 CC R(2,IZ)=R(2,JD)+RBM*RB
54862 B=-B
54875 C PARTIAL, UNATTACHED BEAM IS PLACED AUTOMATICALLY IN ITMSUB.
54900 GO TO 8
55000 C PARTIAL BEAM IS ON RIGHT(+) OR LEFT(-). RBM IS LENGTH.
55100 10 IF(JC.EQ.JB.AND.B.NE.20.)JC=JD
55200 C PUTS BEAMS IN RIGHT PLACE.
55300 R(2,IZ)=R(2,JC)
55400 C THIS WILL BE POS.3
55410 R(3,IZ)=RA
55455 C DISPLACES
55500 GO TO 8
55600 2 CONTINUE
55700 RETURN
55800 8 JB=JD+1
55810 R(8,IZ)=B
55855 C FINDS SIDE (L,R) FOR PARTIAL BEAM
55900 R(1,IZ)=999.
56100 C FOR NEW DISPLACEMENT
56200 IF(JB.LT.K)GO TO 6
56400 END